Vorgehen:
Eine Klasse MyPageTitleProvider.php in myextension/Classes/PageTitle erstellen:
<?php
namespace Rms\Blog;
use TYPO3\CMS\Core\PageTitle\AbstractPageTitleProvider;
class MyPageTitleProvider extends AbstractPageTitleProvider
{
/**
* @param string $title
*/
public function setTitle(string $title)
{
$this->title = $title;
}
}
Danach wird der PageTitleProvider und bei mehrern Providern ggf. die Priorität in TypoScript konfiguriert
config.pageTitleProviders {
custom {
provider = Rms\Blog\MyPageTitleProvider
before = pages
after = altPageTitle
}
}
Nun kann der neue PageTitleProvider z.B. innerhalb einer show() Funktion verwendet werden, um den Default Page-Title zu überschreiben:
<?php
class PostController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
/**
* action show
*
* @param \Rms\Blog\Domain\Model\Post $post
* @return \Psr\Http\Message\ResponseInterface
*/
public function showAction(\Rms\Blog\Domain\Model\Post $post): \Psr\Http\Message\ResponseInterface
{
$titleProvider = GeneralUtility::makeInstance(\Rms\Blog\MyPageTitleProvider::class);
$titleProvider->setTitle($post->getTitle());
$this->view->assign('post', $post);
return $this->htmlResponse();
}
}